iT邦幫忙

2022 iThome 鐵人賽

DAY 6
0
Web 3

Road Map To DApp Developer系列 第 6

【DAY6】 - ERC721 的核心

  • 分享至 

  • xImage
  •  

【DAY6】 - ERC721 的核心

Preface

前面雖然介紹了 ERC721 的所有權由來,也說明了 ERC721 協議的 function 有哪些,與該如何 deploy 和 mint 一個 NFT,但是卻沒有提到實際上這些 token 是如何當作所有權的,且它與 ERC20 的最大不同為何?

IERC721 metadata

What's metadata?

原本的 ERC721 只包含了如 ERC20 的函式,包含 name()symbol()totalSupply() 等等。我們已經清楚在 ERC721 中,每一枚代幣是獨一無二的,但我們卻似乎無法在上面這些 function 中直接的看出每一枚代幣的不同。

事實上,後來人們又提出了 IERC721Metadata 的延伸協議,以下是他的內容。


sited from openzepplin

我們可以看到其中最終要的應該就是先前沒有出現過的 tokenURI(tokenId),而這個函式便是讓 NFT 可以連接其內容的主要因素。

URI 的全名是 Universal Resource Identifier,其實就是一個連結,可以連結到某一個特定的網址。而呼叫 tokenURI(tokenId) 時,便會回傳一個網址,這個網址便代表著這張 NFT 的內容。

而 metadata 這個概念不僅只用在 NFT 中,其實一般的資料儲存中就大量使用了 metadata 的概念,這個網站中提到了很多關於 data-metadata 之間的關係。就小弟自己的見解,data 與 metadata 的關係與 C++ 中的 object 類似。

你可以透過 class 自定義想要的 object,而每個 object 都有屬於自己的 attribute。例如我們可以在遊戲中做一把劍,設定它的性質是什麼。

class Sword {
    int name;
    int attack_damage;
    int durability;
    string skill;  
}

data 與 metadata 的關係則像是下圖:


sited from What is Metadata (with examples)

其實基本上就與 Object 的形式差不多。但是 NFT 的 metadata 會以 JSON 的方式儲存。

而若將 NFT 與 metadata 圖像化,大致上就會長得跟下面這張圖差不多。


sited from NFTs in Ethereum explained - Pablo Cibraro

在鏈上的每一枚 NFT 可以透過 smart contract 中的函式如 _setTokenUri(tokenId, uri) 來使 NFT 指向哪一個 metadata。

而就是這個可以讓 NFT 指向 metadata 的功能,使 NFT 和 FT 產生了區別,我們可以利用 metadata 使每一枚 NFT 獲得不同的特徵。拿武器來舉例就是,我們可以設定每一把劍的能力值都不同,讓每個人拿到的劍的特徵都不一樣。

JSON

JSON 的全名是 JavaScript Object Notation,簡單來說它就是一個儲存資料的格式。這個格式可以方便人類閱讀和簡化機器的解讀。

BAYC#8922 為例,我們可以在 opensea 上看到
它的 properties 長這樣:

這是項目方在合圖時,這張圖獲得的不同部件的機率。而再往下按進 detail 中可以看到 metadata,點入後便可以看到這個檔案。

{
    "image":"ipfs://QmZ7417ZpQBVh93naazDGpX1myH9t3vX3gATn8qLvBxCX4",
    "attributes":[
        {"trait_type":"Eyes","value":"Crazy"},
        {"trait_type":"Background","value":"Army Green"},
        {"trait_type":"Mouth","value":"Small Grin"},
        {"trait_type":"Fur","value":"Golden Brown"},
        {"trait_type":"Clothes","value":"Blue Dress"}
    ]
}

可以看到像是上方的此張 NFT,他的 attribute 就有: Eyes, Background, Mouth, Fur, Clothes,且每個 attribute 都有不同的性質。

由此可以間接地看出,市面上大部分的 NFT 是透過程式疊加不同的圖層而得到這些 attribute 中的性質,最後形成了一張 NFT 的。


BAYC#8922

Closing

ERC721 aka NFT 就是透過這個取得這個神奇的 metadata,來特製他每一枚代幣的價值,也就使 NFT 擁有「非同質化」這個特質了。在下一篇中會提到如何去中心化的儲存 IPFS,讓你的 NFT 是真正的儲存在分散式系統中,無法被修改或刪除。

References


若有文章內有任何錯誤的地方歡迎指點與討論!非常感謝!

歡迎贊助窮困潦倒大學生
0xd8538ea74825080c0c80B9B175f57e91Ff885Cb4


上一篇
【DAY5】 - ERC721 (Mint Your 1st NFT)
下一篇
【DAY7】 - IPFS 星際大戰(X) 星際文件系統(O)
系列文
Road Map To DApp Developer30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言